#ifndef _BUTTON_H
#define _BUTTON_H

#define MAX_BUTTON_NUM 6 // 最多允许的按键个数

// 防抖时间，单位毫秒
#define BUTTON_DEBOUNCE_MS  100

// 按键的掩码定义
#define BUTTON_BIT_MASK(n) (0x00000001 << n)
#define BUTTON_ALL_MASK    0xFFFFFFFF

#define BUTTON_DOWN_LEVEL LOW   // 按键按下的电平，即：触发电平
#define BUTTON_UP_LEVEL   HIGH  // 按键弹起的电平，即：默认电平

/**
 * @brief 初始化按键
 * 
 * @note 在setup中调用
 * 
 * @param btnNumber [in] number of button
 * @param btnPinList [in] list of button PIN
 */
void button_init(int btnNumber, int * btnPinList);

// 检查指定的按键是否有按下按键，但不读出按键
// 按键掩码示例: BUTTON_BIT_MASK(0)|BUTTON_BIT_MASK(1)
// 所有按键的掩码: BUTTON_ALL_MASK
// 返回:
//   0 - 没有按键
// 非0 - 有按键的位掩码
int is_button_hit(unsigned long btnBitMask);

// 检查是否有任何按键按下
// 返回:
//   0 - 没有任何按键
// 非0 - 有按键按下
int is_any_button_hit(void);

// 读出指定编号的按键
//  btnId: 按键编号，0~5
//   有按键，返回1
//   没有按键，返回0
int button_get(int btnId);

// Call in each loop
// 在主loop中调用此接口
int button_polling(void);

#endif
